package cn.tedu._03mvcboot01.controller;

import cn.tedu._03mvcboot01.pojo.dto.UserLoginDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

/*
@Controller:
@Controller注解表示当前类是一个控制器类，控制器类是SpringMVC提供的一种特殊类型的控制器类，
 SpringMVC会自动扫描控制器类，并生成控制器类的实例，并注入到Spring容器中。作用是接收浏览器发送过来的请求，并返回响应给浏览器。
 那怎么样才能找到处理请求的方法呢？
 通过@RequestMapping请求映射，然后根据请求的路径进行匹配，映射到对应的控制器方法。
 @ResponseBody:允许控制器方法以返回值的形式返回给客户端数据

 练习：
 订单模块-查询订单
 controller.OrderController
 请求地址：http://localhost:8080/v1/orders/select
 返回：恭喜你查询成功
 */
@Controller
public class UserController {
    //请求地址：http://localhost:8080/v1/users/login
    @RequestMapping("/v1/users/login")
    @ResponseBody
    public String login() {
        //1动态请求案例
        //运行，页面显示报错404，因为不允许直接返回一个字符串，
        // 需要再添加一个注释@ResponseBody 。成功
        return "登录成功";
    }

    /*

        2注册功能
        GET请求：http://localhost:8080/v1/users/reg？username=xxx&password=xxx
        POST请求：
        写一个html表单演示post请求
        <form action="http://localhost:8080/v1/users/reg" method="post">
            用户名：<input type="text" name="username">
            密码：<input type="password" name="password">
            <input type="submit" value="注册">注册</input>
        </form>
     */
    @RequestMapping("/v1/users/reg")
    @ResponseBody
    public String reg() {
        return "注册成功";
    }
    /*
        5 服务端接收参数
         5.1 HttpServletRequest接收
         http://localhost:8080/v1/users/login1?username=xxx&password=yyy
     */
    @RequestMapping("/v1/users/login1")
    @ResponseBody
    public String login1(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        return "用户名："+username+"，密码："+password;
    }

    /*
    2.接收数据方式2：通过DTO类方式接收
    http://localhost:8080/v1/users/login2?username=xxx&password=yyy
    如果客户端传递数据过多，通过 `HttpServletRequest` 方式接收复用性较差,所以可以将数据封装到 `POJO类` 中来接收。
     */
    @RequestMapping("/v1/users/login2")
    @ResponseBody
    public String login2(UserLoginDTO userLoginDTO){
        String username=userLoginDTO.getUsername();
        String password=userLoginDTO.getPassword();
        return "用户名："+username+"，密码："+password;
    }

//        3.接收数据方式3：通过参数类型接收
//    http://localhost:8080/v1/users/login3?username=xxx&password=yyy
//    如果客户端传递数据过多，通过 `HttpServletRequest` 方式接收复用性较差,所以可以将数据封装到 `POJO类` 中来接收。

    @RequestMapping("/v1/users/login3")
    @ResponseBody
    public String login3(String username,String password){
        return "用户名："+username+"，密码："+password;
    }
}
